import axios from "axios"
import { useUserStore } from '@/store'
import { ElMessage } from 'element-plus'

export const baseURL = 'https://mini-cloud.top:3002/admin'
export const uploadURL = 'https://mini-cloud.top:7777'

const success = (msg: string) => {
    ElMessage({
        message: msg || '操作成功!',
        type: 'success',
    })
}

const error = (msg: string) => {
    ElMessage.error(msg || '操作失败!')
}

// type RequestParams = {
//     url: string,
//     params: object
// }

class HttpRequest {

    // 实例对象
    http: any

    constructor() {
        this.init()
    }

    init() {
        this.http = axios.create({
            baseURL: baseURL,
            timeout: 10000,
            //   headers: {'Authorization': ''},
            // `url` 是用于请求的服务器 URL
            // url: '/Business/Spus?SinceId=-1',

            // `method` 是创建请求时使用的方法
            // method: 'get', // 默认是 get
        })
        // console.log(this.http)
        // 添加请求拦截器
        this.http.interceptors.request.use(function (config: any) {
            console.log('请求前', config)
            const token = useUserStore().user?.token
            // const token = JSON.parse(sessionStorage.getItem('supermarket_user') || '{}')?.token
            if (token) {
                config.headers.Authorization = token
            }
            // 在发送请求之前做些什么
            // uniapp加载api
            // uni.showLoading()
            return config;
        }, function (error: any) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        this.http.interceptors.response.use(function (response: any) {
            console.log('响应前', response)
            // uniapp隐藏加载api
            // uni.hideLoading()

            const data = response.data.data

            if (response.status === 200) {
                success(response.data.message)
            }
            // 默认返回值
            return data;
        }, function (error: any) {
            // 对响应错误做点什么
            console.log('对响应错误做点什么')
            const res = error.response
            // console.log(error.response)
            // console.log(error.request)
            //  uni.hideLoading()
            const data = error.response.data
            console.log(data)
            if (data.status === 401) {
                // 跳转到登录页,待补充
                //  uni.showToast({
                //      title: data.message,
                //      icon: 'none'
                //  })
            } else if (res.status === 403) {

            }
            error(data.message)
            console.error(error)
            return Promise.reject(error);
        });
    }

    // 执行 GET 请求
    get(url: string, params?: object) {
        return new Promise((resolve, reject) => {
            console.log('-------------------------------------')
            console.log(url, params)
            this.http.get(url, {
                params: params
            }).then((res: any) => {
                console.log(res)
                resolve(res)
            }).catch((err: any) => {
                reject(err)
            })
        })
    }

    // 执行 POST 请求
    post(url: string, params: object) {
        return new Promise((resolve, reject) => {
            this.http.post(url, params).then((res: any) => {
                console.log(res)
                resolve(res)
            }).catch((err: any) => {
                reject(err)
            })
        })
    }

    // 执行PUT 请求
    put(url: string, params: object) {
        return new Promise((resolve, reject) => {
            this.http.put(url, params).then((res: any) => {
                console.log(res)
                resolve(res)
            }).catch((err: any) => {
                reject(err)
            })
        })
    }

    // 执行 DELETE 请求
    delete(url: string, params: object) {
        return new Promise((resolve, reject) => {
            this.http.delete(url, {
                params: params
            }).then((res: any) => {
                console.log(res)
                resolve(res)
            }).catch((err: any) => {
                reject(err)
            })
        })
    }

    // 执行多个并发请求
    // all(requestArray: any) {
    //     return new Promise((resolve, reject) => {
    //         axios.all(requestArray).then(axios.spread(function () {
    //         // 所有请求现在都执行完成
    //         console.log('所有并发请求成功')
    //         // 返回所有数据
    //         resolve(arguments)
    //       })).catch(err => {
    //             console.log('并发请求存在错误')
    //             console.error(err)
    //             reject(err)
    //         }).finally(() => {

    //         })
    //     })
    // }
}

export default new HttpRequest()